package com._54programer.demo.codec;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.List;

/**
 * @author SN
 * @date Created by on 2019/11/30
 * @description 字节转整型
 */
public class ToIntegerDecoder extends ByteToMessageDecoder {

    /**
     * 1.每次入站从ByteBuf中读取4字节, 将其解析为一个int, 然后将它添加到下一个List中
     * 2.当没有更多元素可以被添加, 它的内容将会被发送给下一个ChannelInboundHandler
     * 3.int在被添加到List中时, 会被自动装箱为Integer, 在调用readInt()方法之前必须验证Bytebuf中是否有足够的数据
     */
    @Override
    protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf in, List<Object> out) throws Exception {
        if(in.readableBytes() >= 4){
            out.add(in.readInt());
        }
    }

}
